package com.taobao.api.internal.tdc.parser;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.w3c.dom.Element;

import com.taobao.api.internal.util.XmlUtils;

/**
 * tdc xml解析map类
 * 
 * @author haofeng 2013-1-18
 */
public class XmlReader {

	@SuppressWarnings("unchecked")
	public Map<String, Object> dom2Map(Element e) {
		Map<String, Object> map = new HashMap<String, Object>();
		List<?> list = XmlUtils.getChildElements(e);
		if (list.size() > 0) {
			for (int i = 0; i < list.size(); i++) {
				Element iter = (Element) list.get(i);
				List<Object> mapList = new ArrayList<Object>();
				if (XmlUtils.getChildElements(iter).size() > 0) {
					Map<?, ?> m = dom2Map(iter);
					if (map.get(iter.getNodeName()) != null) {
						Object obj = map.get(iter.getNodeName());
						if (!obj.getClass().getName().equals("java.util.ArrayList")) {
							mapList = new ArrayList<Object>();
							mapList.add(obj);
							mapList.add(m);
						}
						if (obj.getClass().getName().equals("java.util.ArrayList")) {
							mapList = (List<Object>) obj;
							mapList.add(m);
						}
						map.put(iter.getNodeName(), mapList);
					} else
						map.put(iter.getNodeName(), m);
				} else {
					if (map.get(iter.getNodeName()) != null) {
						Object obj = map.get(iter.getNodeName());
						if (!obj.getClass().getName().equals("java.util.ArrayList")) {
							mapList = new ArrayList<Object>();
							mapList.add(obj);
							mapList.add(iter.getTextContent());
						}
						if (obj.getClass().getName().equals("java.util.ArrayList")) {
							mapList = (List<Object>) obj;
							mapList.add(iter.getTextContent());
						}
						map.put(iter.getNodeName(), mapList);
					} else
						map.put(iter.getNodeName(), iter.getTextContent());
				}
			}
		} else {
			map.put(e.getNodeName(), e.getTextContent());
		}
		return map;
	}

}
